home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / m2gem106.lzh / CRYSTAL1.06 / SRC / CRYSTAL / VINPUT.MOD < prev    next >
Encoding:
Modula Implementation  |  1993-05-20  |  5.9 KB  |  234 lines

  1. IMPLEMENTATION MODULE VInput;
  2.  
  3. (*
  4. VDI Input Functions.
  5.  
  6. UK __DATE__ __TIME__
  7. *)
  8.  
  9. (*IMP_SWITCHES*)
  10.  
  11. FROM VDI    IMPORT contrl,intin,ptsin,intout,ptsout,v,CallVDI,XY,EOS,
  12.                    Integer,Key,SpecialKey,MaxOutput,Point;
  13. FROM PORTAB IMPORT UNSIGNEDWORD,SIGNEDWORD,WORDSET,ANYTYPE,ANYWORD;
  14. FROM SYSTEM IMPORT ADR;
  15. CAST_IMPORT
  16.  
  17. PROCEDURE VSInMode(Handle : UNSIGNEDWORD;
  18.                    DevType: Devices;
  19.                    Mode   : InputModes);
  20. BEGIN
  21.   intin[0]:= ORD(DevType);
  22.   intin[1]:= ORD(Mode);
  23.   CallVDI(33,0,2,Handle);
  24. END VSInMode;
  25.  
  26. PROCEDURE VRqLocator(     Handle: UNSIGNEDWORD;
  27.                           X     : XY;
  28.                           Y     : XY;
  29.                       VAR XOut  : XY;
  30.                       VAR YOut  : XY;
  31.                       VAR Term  : Key);
  32. BEGIN
  33.   ptsin[0]:= X;
  34.   ptsin[1]:= Y;
  35.   CallVDI(28,1,0,Handle);
  36.   XOut:= ptsout[0];
  37.   YOut:= ptsout[1];
  38.   Term:= intout[0];
  39. END VRqLocator;
  40.  
  41. #if no_set_return
  42. PROCEDURE VSmLocator(    Handle: UNSIGNEDWORD;
  43.                          X     : XY;
  44.                          Y     : XY;
  45.                      VAR XOut  : XY;
  46.                      VAR YOut  : XY;
  47.                      VAR Term  : Key): ANYWORD;
  48. #else
  49. PROCEDURE VSmLocator(    Handle: UNSIGNEDWORD;
  50.                          X     : XY;
  51.                          Y     : XY;
  52.                      VAR XOut  : XY;
  53.                      VAR YOut  : XY;
  54.                      VAR Term  : Key): WORDSET;
  55. #endif
  56. BEGIN
  57.   ptsin[0]:= X;
  58.   ptsin[1]:= Y;
  59.   CallVDI(28,1,0,Handle);
  60.   XOut:= ptsout[0];
  61.   YOut:= ptsout[1];
  62.   Term:= intout[0];
  63.   contrl.c[4]:= contrl.c[4] * 2;
  64. #if no_set_return
  65.   RETURN CAST(ANYWORD,CAST(WORDSET,contrl.c[4]) + CAST(WORDSET,contrl.c[2]));
  66. #else
  67.   RETURN CAST(WORDSET,contrl.c[4]) + CAST(WORDSET,contrl.c[2]);
  68. #endif
  69. END VSmLocator;
  70.  
  71. PROCEDURE VRqValuator(    Handle     : UNSIGNEDWORD;
  72.                           ValuatorIn : UNSIGNEDWORD;
  73.                       VAR ValuatorOut: UNSIGNEDWORD;
  74.                       VAR Terminator : Key);
  75. BEGIN
  76.   intin[0]:= ValuatorIn;
  77.   CallVDI(29,0,1,Handle);
  78.   ValuatorOut:= intout[0];
  79.   Terminator:= intout[1];
  80. END VRqValuator;
  81.  
  82. PROCEDURE VSmValuator(    Handle: UNSIGNEDWORD;
  83.                           ValIn : UNSIGNEDWORD;
  84.                       VAR ValOut: UNSIGNEDWORD;
  85.                       VAR Term  : Key;
  86.                       VAR Status: UNSIGNEDWORD);
  87. BEGIN
  88.   intin[0]:= ValIn;
  89.   CallVDI(29,0,1,Handle);
  90.   ValOut:= intout[0];
  91.   Term:= intout[1];
  92.   Status:= contrl.c[4];
  93. END VSmValuator;
  94.  
  95. PROCEDURE VRqChoice(    Handle: UNSIGNEDWORD;
  96.                         ChIn  : Key;
  97.                     VAR ChOut : Key);
  98. BEGIN
  99.   intin[0]:= ChIn;
  100.   CallVDI(30,0,1,Handle);
  101.   ChOut:= intout[0];
  102. END VRqChoice;
  103.  
  104. PROCEDURE VSmChoice(    Handle: UNSIGNEDWORD;
  105.                     VAR Choice: Key): BOOLEAN;
  106. BEGIN
  107.   CallVDI(30,0,0,Handle);
  108.   Choice:= intout[0];
  109.   RETURN contrl.c[4] = 1;
  110. END VSmChoice;
  111.  
  112. PROCEDURE VRqString(    Handle   : UNSIGNEDWORD;
  113.                         MaxLength: SIGNEDWORD;
  114.                         EchoMode : BOOLEAN;
  115.                     VAR PXY      : ARRAY OF XY;
  116.                     VAR Input    : ARRAY OF CHAR);
  117.  
  118. VAR i: [0..MaxOutput];
  119.  
  120. BEGIN
  121.   intin[0]:= MaxLength;
  122.   intin[1]:= ORD(EchoMode);
  123.   ptsin[0]:= PXY[0];
  124.   ptsin[1]:= PXY[1];
  125.   CallVDI(31,1,2,Handle);
  126.   i:= 0;
  127.   WHILE i < contrl.c[4] DO
  128.     Input[i]:= CHR(intout[i]);
  129.     INC(i);
  130.   END;
  131.   Input[i]:= EOS;
  132. END VRqString;
  133.  
  134. PROCEDURE VSmString(    Handle   : UNSIGNEDWORD;
  135.                         MaxLength: SIGNEDWORD;
  136.                         EchoMode : BOOLEAN;
  137.                     VAR PXY      : ARRAY OF XY;
  138.                     VAR Input    : ARRAY OF CHAR): UNSIGNEDWORD;
  139.  
  140. VAR i: [0..MaxOutput];
  141.  
  142. BEGIN
  143.   intin[0]:= MaxLength;
  144.   intin[1]:= ORD(EchoMode);
  145.   ptsin[0]:= PXY[0];
  146.   ptsin[1]:= PXY[1];
  147.   CallVDI(31,1,2,Handle);
  148.   i:= 0;
  149.   WHILE i < contrl.c[4] DO
  150.     Input[i]:= CHR(intout[i]);
  151.     INC(i);
  152.   END;
  153.   Input[i]:= EOS;
  154.   RETURN contrl.c[4];
  155. END VSmString;
  156.  
  157. PROCEDURE VSCForm(    Handle : UNSIGNEDWORD;
  158.                   VAR CurForm: ARRAY OF ANYTYPE);
  159. BEGIN
  160.   v.iioff:= ADR(CurForm);
  161.   CallVDI(111,0,37,Handle);
  162.   v.iioff:= ADR(intin);
  163. END VSCForm;
  164.  
  165. PROCEDURE VExTimV(    Handle  : UNSIGNEDWORD;
  166.                       Timer   : PROC;
  167.                   VAR OldTimer: PROC;
  168.                   VAR Time    : UNSIGNEDWORD);
  169. BEGIN
  170.   contrl.u.p1:= Timer;
  171.   CallVDI(118,0,0,Handle);
  172.   OldTimer:= contrl.u.p2;
  173.   Time:= intout[0];
  174. END VExTimV;
  175.  
  176. PROCEDURE VShowC(Handle: UNSIGNEDWORD;
  177.                  Reset : BOOLEAN);
  178. BEGIN
  179.   intin[0]:= ORD(Reset);
  180.   CallVDI(122,0,1,Handle);
  181. END VShowC;
  182.  
  183. PROCEDURE VHideC(Handle: UNSIGNEDWORD);
  184. BEGIN
  185.   CallVDI(123,0,0,Handle);
  186. END VHideC;
  187.  
  188. PROCEDURE VQMouse(    Handle: UNSIGNEDWORD;
  189.                   VAR Status: BOOLEAN;
  190.                   VAR X     : XY;
  191.                   VAR Y     : XY);
  192. BEGIN
  193.   CallVDI(124,0,0,Handle);
  194.   Status:= intout[0] = 1;
  195.   X:= ptsout[0];
  196.   Y:= ptsout[1];
  197. END VQMouse;
  198.  
  199. PROCEDURE VExButV(    Handle  : UNSIGNEDWORD;
  200.                       UsrCode : PROC;
  201.                   VAR SaveCode: PROC);
  202. BEGIN
  203.   contrl.u.p1:= UsrCode;
  204.   CallVDI(125,0,0,Handle);
  205.   SaveCode:= contrl.u.p2;
  206. END VExButV;
  207.  
  208. PROCEDURE VExMotV(    Handle  : UNSIGNEDWORD;
  209.                       UsrCode : PROC;
  210.                   VAR SaveCode: PROC);
  211. BEGIN
  212.   contrl.u.p1:= UsrCode;
  213.   CallVDI(126,0,0,Handle);
  214.   SaveCode:= contrl.u.p2;
  215. END VExMotV;
  216.  
  217. PROCEDURE VExCurV(    Handle  : UNSIGNEDWORD;
  218.                       UsrCode : PROC;
  219.                   VAR SaveCode: PROC);
  220. BEGIN
  221.   contrl.u.p1:= UsrCode;
  222.   CallVDI(127,0,0,Handle);
  223.   SaveCode:= contrl.u.p2;
  224. END VExCurV;
  225.  
  226. PROCEDURE VQKeyS(    Handle: UNSIGNEDWORD;
  227.                  VAR Status: SpecialKey);
  228. BEGIN
  229.   CallVDI(128,0,0,Handle);
  230.   Status:= CAST(SpecialKey,intout[0]);
  231. END VQKeyS;
  232.  
  233. END VInput.
  234.